package cn.iocoder.yudao.module.pay.framework;

import cn.iocoder.yudao.module.api.pay.order.eums.UnifiedPayChannelEnum;
import cn.iocoder.yudao.module.pay.framework.impl.AbstractPayClient;

/**
 * 支付客户端的工厂接口
 *
 * @author 芋道源码
 */
@SuppressWarnings({"UnusedReturnValue", "unused"})
public interface PayClientFactory {

    /**
     * 创建支付客户端
     *
     * @param channelCode 渠道编码
     * @param channelConfig 支付配置
     * @return 支付客户端
     */
    <Config extends PayClientConfig, Client extends AbstractPayClient<Config>> Client createOrUpdatePayClient(String channelCode, Config channelConfig);

    /**
     * 注册支付客户端 Class，用于模块中实现的 PayClient
     *
     * @param channel 支付渠道的编码的枚举
     * @param payClientClass 支付客户端 class
     */
    void registerPayClientClass(UnifiedPayChannelEnum channel, Class<? extends PayClient<?>> payClientClass);

}
